﻿// Copyright (c) Vitaly Kamiansky. All rights reserved. 
// See License.txt in the project root.

namespace Property
{
    /// <summary>
    /// Supports getter-based output.
    /// </summary>
    /// <typeparam name="T">Type of output.</typeparam>
    public interface IOutput<T>
    {
        /// <summary>
        /// Current state of the output.
        /// </summary>
        T Value { get; }

        /// <summary>
        /// Side-effects-free current state of the output.
        /// </summary>
        T DebugValue { get; }

        /// <summary>
        /// Indicates whether the output value is currently being updated.
        /// </summary>
        bool IsLoading { get; }
    }
}
